Description
You may declare your own delegates. Implement the methods of the class 'EffectiveDate' so it can be delegated to. Store only the time in milliseconds in 'timeInMillis' property.
Use the extension functions
MyDate.toMillis()
andLong.toDate()
, defined atMyDate.kt
委譲 は自分で宣言することができます。委譲ができるように、'EffectiveDate' を実装してください。ミリ秒単位の時間のみを 'timeInMillis' プロパティに格納してください。
MyDate.kt
に定義されている拡張関数MyDate.toMillis()
およびLong.toDate()
を使用してください。
Code
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
class D {
var date: MyDate by EffectiveDate()
}
class EffectiveDate<R> : ReadWriteProperty<R, MyDate> {
var timeInMillis: Long? = null
override fun getValue(thisRef: R, property: KProperty<*>): MyDate {
return timeInMillis!!.toDate()
}
override fun setValue(thisRef: R, property: KProperty<*>, value: MyDate) {
timeInMillis = value.toMillis()
}
}
Memo
- インターフェース
ReadOnlyProperty
とReadWriteProperty
を使用することで、新しいクラスを作らずに匿名オブジェクトとして作成することもできる